// pages/webview-auth/webview-auth.ts
Page({
  data: {
    authUrl: '',
    loading: true,
    error: false
  },

  onLoad(options: any) {
    console.log('[WebviewAuth] 页面加载，参数:', options);
    
    // 设置公众号来源标记
    wx.setStorageSync('fromOfficialAccount', true);
    console.log('[WebviewAuth] 设置公众号来源标记');
    
    // 构建授权URL
    const appId = 'wx54ab849a3103d897'; // 公众号appid
    const redirectUri = encodeURIComponent('https://xhd.szxhdkj.com/wechat/auth/callback');
    const state = 'webview_auth';
    const scope = 'snsapi_userinfo'; // 使用snsapi_userinfo以获取unionid
    
    const authUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${redirectUri}&response_type=code&scope=${scope}&state=${state}#wechat_redirect`;
    
    console.log('[WebviewAuth] 🔗 生成的授权URL:', authUrl);
    
    this.setData({
      authUrl,
      loading: false
    });
  },

  /**
   * WebView加载完成
   */
  handleLoad() {
    console.log('[WebviewAuth] ✅ web-view加载完成');
    this.setData({ loading: false });
  },

  /**
   * WebView加载失败
   */
  handleError(e: any) {
    console.error('[WebviewAuth] ❌ web-view加载失败:', e.detail);
    this.setData({
      error: true,
      loading: false
    });
    
    wx.showToast({
      title: '授权页面加载失败',
      icon: 'none',
      duration: 2000
    });
  },

  /**
   * 处理web-view消息事件
   */
  handleMessage(event: any) {
    console.log('[WebviewAuth] 📨 收到web-view消息:', event);
    console.log('[WebviewAuth] 📨 消息详情 - detail:', event.detail);
    
    // 获取消息数据数组
    const messages = event.detail.data;
    console.log('[WebviewAuth] 📨 消息详情 - data数组长度:', messages.length);
    
    // 打印所有消息
    console.log('[WebviewAuth] 📋 所有消息:', messages);
    
    // 查找包含授权信息的消息
    const authMessage = messages.find((msg: any) => {
      return (
        msg.type === 'officialAccountAuth' || 
        msg.openid || 
        msg.officialAccountOpenid || 
        msg.unionid
      );
    });
    
    if (authMessage) {
      console.log('[WebviewAuth] 📋 找到有效消息:', authMessage);
      this.processAuthMessage(authMessage);
    } else {
      console.log('[WebviewAuth] ⚠️ 未找到包含授权信息的消息');
      
      // 尝试从HTML内容中提取openid和unionid
      this.tryExtractFromHTML(event.detail);
    }
  },

  /**
   * 尝试从HTML内容中提取授权信息
   */
  tryExtractFromHTML(detail: any) {
    console.log('[WebviewAuth] 🔍 尝试从HTML内容中提取授权信息');
    
    try {
      // 尝试从数据中查找包含openid或unionid的字符串
      let htmlContent = '';
      
      if (detail && detail.data) {
        if (Array.isArray(detail.data)) {
          // 将数组中的所有元素连接成一个字符串
          htmlContent = detail.data.map((item: any) => {
            if (typeof item === 'string') {
              return item;
            } else if (typeof item === 'object') {
              return JSON.stringify(item);
            }
            return '';
          }).join(' ');
        } else if (typeof detail.data === 'string') {
          htmlContent = detail.data;
        } else if (typeof detail.data === 'object') {
          htmlContent = JSON.stringify(detail.data);
        }
      }
      
      console.log('[WebviewAuth] 🔍 提取的HTML内容长度:', htmlContent.length);
      
      // 尝试提取openid
      let officialAccountOpenid = this.extractValueFromHTML(htmlContent, [
        /openid["'\s:=]+["']?([^"'&\s<>]+)["']?/i,
        /officialAccountOpenid["'\s:=]+["']?([^"'&\s<>]+)["']?/i,
        /official_account_openid["'\s:=]+["']?([^"'&\s<>]+)["']?/i,
        /"openid"\s*:\s*"([^"]+)"/i,
        /'openid'\s*:\s*'([^']+)'/i
      ]);
      
      // 尝试提取unionid
      let unionid = this.extractValueFromHTML(htmlContent, [
        /unionid["'\s:=]+["']?([^"'&\s<>]+)["']?/i,
        /union_id["'\s:=]+["']?([^"'&\s<>]+)["']?/i,
        /unionId["'\s:=]+["']?([^"'&\s<>]+)["']?/i,
        /"unionid"\s*:\s*"([^"]+)"/i,
        /'unionid'\s*:\s*'([^']+)'/i,
        /"unionId"\s*:\s*"([^"]+)"/i,
        /'unionId'\s*:\s*'([^']+)'/i,
        /"union_id"\s*:\s*"([^"]+)"/i,
        /'union_id'\s*:\s*'([^']+)'/i
      ]);
      
      // 尝试从URL参数中提取
      if (!officialAccountOpenid || !unionid) {
        const urlMatches = htmlContent.match(/https?:\/\/[^\s"']+/g);
        if (urlMatches) {
          for (const url of urlMatches) {
            if (!officialAccountOpenid) {
              const openidMatch = url.match(/[?&]openid=([^&]+)/);
              if (openidMatch && openidMatch[1]) {
                officialAccountOpenid = decodeURIComponent(openidMatch[1]);
                console.log('[WebviewAuth] ✅ 从URL参数中提取到openid:', officialAccountOpenid);
              }
            }
            
            if (!unionid) {
              const unionidMatch = url.match(/[?&]unionid=([^&]+)/);
              if (unionidMatch && unionidMatch[1]) {
                unionid = decodeURIComponent(unionidMatch[1]);
                console.log('[WebviewAuth] ✅ 从URL参数中提取到unionid:', unionid);
              }
            }
          }
        }
      }
      
      if (officialAccountOpenid) {
        console.log('[WebviewAuth] ✅ 从HTML内容中提取到openid:', officialAccountOpenid);
        
        // 存储到本地缓存
        wx.setStorageSync('officialAccountOpenid', officialAccountOpenid);
        console.log('[WebviewAuth] 💾 已将公众号openid存储到缓存');
        
        // 🆕 设置刚从webview-auth返回的标记，用于自动登录检测
        wx.setStorageSync('justFromWebViewAuth', true);
        console.log('[WebviewAuth] 🏷️ 设置从webview-auth返回标记');
        
        // 如果有unionid，也存储到缓存
        if (unionid) {
          console.log('[WebviewAuth] ✅ 从HTML内容中提取到unionid:', unionid);
          wx.setStorageSync('unionid', unionid);
          console.log('[WebviewAuth] 💾 已将unionid存储到缓存');
        } else {
          console.log('[WebviewAuth] ⚠️ 未能从HTML内容中提取到unionid');
        }
        
        // 返回登录页面
        this.navigateBackToLogin(officialAccountOpenid, unionid);
      } else {
        console.warn('[WebviewAuth] ⚠️ 未能从HTML内容中提取到openid');
      }
    } catch (error) {
      console.error('[WebviewAuth] ❌ 从HTML内容中提取授权信息失败:', error);
    }
  },

  /**
   * 从HTML内容中提取值
   * @param html HTML内容
   * @param patterns 要匹配的模式（字符串或正则表达式）
   */
  extractValueFromHTML(html: string, patterns: (string | RegExp)[]): string | null {
    if (!html) return null;
    
    for (const pattern of patterns) {
      try {
        if (pattern instanceof RegExp) {
          // 如果是正则表达式模式
          const match = html.match(pattern);
          if (match && match[1]) {
            console.log(`[WebviewAuth] 🔍 使用正则表达式 ${pattern} 匹配成功:`, match[1]);
            return match[1];
          }
        } else {
          // 如果是字符串键名
          const regexPatterns = [
            new RegExp(`"${pattern}"\\s*:\\s*"([^"]+)"`, 'i'),
            new RegExp(`'${pattern}'\\s*:\\s*'([^']+)'`, 'i'),
            new RegExp(`${pattern}\\s*=\\s*["']([^"']+)["']`, 'i'),
            new RegExp(`${pattern}["'\\s:=]+["']?([^"'&\\s<>]+)["']?`, 'i')
          ];
          
          for (const regex of regexPatterns) {
            const match = html.match(regex);
            if (match && match[1]) {
              console.log(`[WebviewAuth] 🔍 使用键名 ${pattern} 匹配成功:`, match[1]);
              return match[1];
            }
          }
        }
      } catch (error) {
        console.warn(`[WebviewAuth] ⚠️ 提取 ${pattern} 时出错:`, error);
      }
    }
    
    return null;
  },

  /**
   * 处理授权消息
   */
  processAuthMessage(message: any) {
    console.log('[WebviewAuth] 📋 处理授权消息:', message);
    
    // 提取公众号openid
    const officialAccountOpenid = message.officialAccountOpenid || message.openid;
    
    // 提取unionid (尝试多种可能的字段名)
    const unionid = message.unionid || message.union_id || message.unionId;
    
    if (officialAccountOpenid) {
      console.log('[WebviewAuth] ✅ 获取到公众号openid:', officialAccountOpenid);
      
      // 存储到本地缓存
      wx.setStorageSync('officialAccountOpenid', officialAccountOpenid);
      console.log('[WebviewAuth] 💾 已将公众号openid存储到缓存');
      
      // 🆕 设置刚从webview-auth返回的标记，用于自动登录检测
      wx.setStorageSync('justFromWebViewAuth', true);
      console.log('[WebviewAuth] 🏷️ 设置从webview-auth返回标记');
      
      // 如果有unionid，也存储到缓存
      if (unionid) {
        console.log('[WebviewAuth] ✅ 获取到unionid:', unionid);
        wx.setStorageSync('unionid', unionid);
        console.log('[WebviewAuth] 💾 已将unionid存储到缓存');
      } else {
        console.log('[WebviewAuth] ⚠️ 未获取到unionid');
      }
      
      // 返回登录页面
      this.navigateBackToLogin(officialAccountOpenid, unionid);
    } else {
      console.warn('[WebviewAuth] ⚠️ 未能从消息中获取公众号openid');
    }
  },

  /**
   * 返回登录页面
   */
  navigateBackToLogin(officialAccountOpenid: string, unionid?: string | null) {
    console.log('[WebviewAuth] 🎯 准备返回登录页面，携带openid参数');
    
    const params = {
      officialAccountOpenid,
      fromOfficialAccount: 'true',
      fromWebViewAuth: 'true'
    };
    
    // 如果有unionid，也添加到参数中
    if (unionid) {
      Object.assign(params, { unionid });
      console.log('[WebviewAuth] 🔍 添加unionid到跳转参数:', unionid);
    } else {
      console.log('[WebviewAuth] ⚠️ 未获取到unionid，跳转参数中不包含unionid');
    }
    
    // 构建URL参数
    const queryString = Object.entries(params)
      .map(([key, value]) => `${key}=${value}`)
      .join('&');
    
    console.log('[WebviewAuth] 🔍 完整跳转参数:', queryString);
    
    // 跳转回登录页面
    wx.redirectTo({
      url: `/pages/login/login?${queryString}`,
      success: () => {
        console.log('[WebviewAuth] 🎯 成功跳转到登录页面');
      },
      fail: (error) => {
        console.error('[WebviewAuth] ❌ 跳转到登录页面失败:', error);
        
        // 尝试使用switchTab作为备选方案
        wx.switchTab({
          url: '/pages/index/index',
          success: () => {
            console.log('[WebviewAuth] ✅ 使用switchTab跳转到首页成功');
          },
          fail: (err) => {
            console.error('[WebviewAuth] ❌ 所有跳转方式都失败:', err);
          }
        });
      }
    });
  },

  onUnload() {
    console.log('[WebviewAuth] 📤 页面卸载');
  }
}); 